﻿using System;
using System.Collections.Generic;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows;
using System.Text;
using System.Windows.Controls;

namespace editor
{
    public class line_strelk : UIElement
    {
        //номер элемента в коллекции которому принадлежит начало стрелки
        public int begin_el_n_FC;       //главный канвас
        public int begin_el_n_TC;       //зависимый канвас
        //номер элемента в коллекции которому принадлежит конец стрелки
        public int end_el_n_FC;
        public int end_ei_n_TC;

        TextBox tex_box;

        public Line strelka = new Line();

        // наконечник стрелки
        Polyline str = new Polyline();
        //номер элемента в кавнавасе
        public int N;

        //начало линии
        public void pos_line_B(Point s)
        {
            strelka.X1 = s.X;
            strelka.Y1 = s.Y;

        }
        //начало линии
        public void pos_line_B_X1(Double s)
        {
            strelka.X1 = s;
        }

        //начало линии
        public void pos_line_B_Y1(Double s)
        {
            strelka.Y1= s;
        }
        public void pos_line_E(Point s)
        {
            strelka.X2 = s.X;
            strelka.Y2 = s.Y;

        }
        public void pos_line_E_X2(Double s)
        {
            strelka.X2 = s;
      
        }
        public void pos_line_E_Y2(Double s)
        {
            strelka.Y2 = s;
        }
        //проперти линии
        public void line_prop_()
        {
            //свойства
            strelka.StrokeEndLineCap = PenLineCap.Triangle;  //задает наконечник
            strelka.Stroke = Brushes.Black;                   //способ закраски контура fill не исполь solicolorbrash
            strelka.StrokeThickness = 2;

            //обработчики
            strelka.PreviewMouseLeftButtonDown+=new MouseButtonEventHandler(strelka_PreviewMouseLeftButtonDown);
            strelka.SizeChanged += new SizeChangedEventHandler(strelka_SizeChanged);

            // наконечник стрелки
            PointCollection myPointCollection2 = new PointCollection();
            myPointCollection2.Add(new Point(strelka.X2 - 15, strelka.Y2 - 5));
            myPointCollection2.Add(new Point(strelka.X2, strelka.Y2));
            myPointCollection2.Add(new Point(strelka.X2 - 15, strelka.Y2 + 5));

            str.Points = myPointCollection2;
            str.Stroke = Brushes.Black;                   //способ закраски контура fill не исполь solicolorbrash
            str.StrokeThickness = 2;                        //толщина
           
            //текст бох
            tex_box = new TextBox();
            tex_box.Height = 25;
        
            tex_box.BorderBrush = Brushes.Gray;

            tex_box.BorderThickness = new Thickness(2);
            tex_box.MaxLength = 200;
            tex_box.MaxWidth = 300;
           
        }
        // наконечник стрелки
        void strelka_SizeChanged(object sender, SizeChangedEventArgs e)
        {
            PointCollection myPointCollection2 = new PointCollection();
          
           
            if (Math.Abs(((Line)sender).X2) < Math.Abs(((Line)sender).X1))
            {
                Canvas.SetLeft(tex_box, ((Line)sender).X2 + 40);
                Canvas.SetTop(tex_box, ((Line)sender).Y2 - 25);

                myPointCollection2.Add(new Point(((Line)sender).X2 +35, ((Line)sender).Y2 - 5));
                myPointCollection2.Add(new Point(((Line)sender).X2+20, ((Line)sender).Y2));
                myPointCollection2.Add(new Point(((Line)sender).X2 + 35, ((Line)sender).Y2 + 5));
            }
            else{

                Canvas.SetLeft(tex_box, ((Line)sender).X1 + 20);
                Canvas.SetTop(tex_box, ((Line)sender).Y2 - 25);

            myPointCollection2.Add(new Point(((Line)sender).X2 - 15, ((Line)sender).Y2 - 5));
            myPointCollection2.Add(new Point(((Line)sender).X2, ((Line)sender).Y2));
            myPointCollection2.Add(new Point(((Line)sender).X2 - 15, ((Line)sender).Y2 + 5));
           
            }
             str.Points = myPointCollection2;
        }

        //добавление линии на канвас
        public void add_canvas(Canvas asd)
        {
            asd.Children.Add(strelka);
            asd.Children.Add(str);
            asd.Children.Add(tex_box);

        }
        public void strelka_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
           // Point pt = e.GetPosition((Canvas)sender);

            //HitTestResult result = VisualTreeHelper.HitTest((Canvas)sender, pt);
            //DependencyObject figura = result.VisualHit;
            //DependencyObject io;
            //io = VisualTreeHelper.GetParent((Line)sender);

            //Canvas can = io as Canvas;
            //can.Children.IndexOf((Line)sender);
        }
 

    }
}
